﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Campeonato.Model;
using Campeonato.Common.BLL;

namespace PESWeb.Pages.Controls
{
    public partial class PartidasGridView : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        public bool DataGridVisible
        {
            get { return this.gvPartidas.Visible; }
            set { this.gvPartidas.Visible = value; }
        }

        public int DataGridSize
        {
            get
            {
                if (this.gvPartidas != null && this.gvPartidas.DataSource != null)
                {
                    return ((IList<Partida>) this.gvPartidas.DataSource).Count;
                }

                return 0;
            }
        }

        public IList<Partida> GetPartidasDataSource
        {
            get
            {
                if (this.gvPartidas != null && this.gvPartidas.DataSource != null)
                {
                    return ((IList<Partida>) this.gvPartidas.DataSource);
                }

                return null;
            }
        }

        public void CarregaJogosPorData(DateTime _data, Campeonato.Model.Campeonato _campeonatoCarregado)
        {
            if (_campeonatoCarregado != null)
            {
                IList<Partida> partidasCampeonato = new List<Partida>();
                partidasCampeonato = PartidaBLL.BuscarPartidasDoDia(_campeonatoCarregado, _data.Date);

                if (partidasCampeonato != null && partidasCampeonato.Count > 0)
                {
                    this.gvPartidas.DataSource = partidasCampeonato;
                    this.gvPartidas.DataBind();
                    this.gvPartidas.Visible = true;
                }
                else
                {
                    this.gvPartidas.Visible = false;
                }
            }
        }

        public void CarregaJogosPorData(DateTime _data, IList<Campeonato.Model.Campeonato> _campeonatosCarregados)
        {
            if (_campeonatosCarregados != null)
            {
                List<Partida> partidasCampeonatos = new List<Partida>();

                foreach (Campeonato.Model.Campeonato c in _campeonatosCarregados)
                {
                    IList<Partida> partidas = PartidaBLL.BuscarPartidasDoDia(c, _data.Date);
                    partidasCampeonatos.InsertRange(partidasCampeonatos.Count, partidas);
                }

                if (partidasCampeonatos != null && partidasCampeonatos.Count > 0)
                {
                    this.gvPartidas.DataSource = partidasCampeonatos;
                    this.gvPartidas.DataBind();
                    this.gvPartidas.Visible = true;
                }
                else
                {
                    this.gvPartidas.Visible = false;
                }
            }
        }

        public void CarregaJogosPorRodada(int _rodada, Campeonato.Model.Campeonato _campeonatoCarregado)
        {
            if (_campeonatoCarregado != null)
            {
                IList<Partida> partidas = PartidaBLL.BuscarPartidasPorRodada(_campeonatoCarregado, _rodada);
                if (partidas != null && partidas.Count > 0)
                {
                    this.gvPartidas.DataSource = partidas;
                    this.gvPartidas.DataBind();
                    this.gvPartidas.Visible = true;
                }
                else
                {
                    this.gvPartidas.Visible = false;
                }
            }
        }

        public void CarregaJogosPorJogador(Jogador _jogador, Campeonato.Model.Campeonato _campeonatoCarregado)
        {
            if (_campeonatoCarregado != null)
            {
                IList<Partida> partidas = PartidaBLL.BuscarPartidasPorJogador(_campeonatoCarregado, _jogador);
                if (partidas != null && partidas.Count > 0)
                {
                    this.gvPartidas.DataSource = partidas;
                    this.gvPartidas.DataBind();
                    this.gvPartidas.Visible = true;
                }
                else
                {
                    this.gvPartidas.Visible = false;
                }
            }
        }

        public void CarregaProximosConfrontos(IList<Partida> _partidas,
                                              IList<Campeonato.Model.Campeonato> _campeonatosCarregados)
        {
           var partidasAnteriores = new List<Partida>();

            foreach (var partida in _partidas)
            {
                partidasAnteriores.AddRange(PartidaBLL.BuscarConfrontosAnteriores(_campeonatosCarregados[0], partida));
            }

            if (partidasAnteriores.Count > 0)
            {
                this.gvPartidas.DataSource = partidasAnteriores;
                this.gvPartidas.DataBind();
                this.gvPartidas.Visible = true;
            }
            else
            {
                this.gvPartidas.Visible = false;
            }
        }

        public List<JogadorVirtual> CarregaJogadoresSuspensos()
        {
            var atletasSuspensos = new List<JogadorVirtual>();

            if (GetPartidasDataSource != null)
            {
                foreach (Partida p in GetPartidasDataSource)
                {
                    atletasSuspensos.AddRange(JogadorBLL.BuscarJogadoresSuspensos(p.Jogador1));
                    atletasSuspensos.AddRange(JogadorBLL.BuscarJogadoresSuspensos(p.Jogador2));
                }
            }

            return atletasSuspensos;
        }

        public List<JogadorVirtual> CarregaJogadoresSuspensos(IList<Partida> _partidas)
        {
            var atletasSuspensos = new List<JogadorVirtual>();

            foreach (Partida p in _partidas)
            {
                atletasSuspensos.AddRange(JogadorBLL.BuscarJogadoresSuspensos(p.Jogador1));
                atletasSuspensos.AddRange(JogadorBLL.BuscarJogadoresSuspensos(p.Jogador2));
            }

            return atletasSuspensos;
        }
    }
}